package com.rabbiter.cm.domain.vo;

import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

/**
 * 封装电影查询条件的视图对象（VO）。
 * 用于接收前端传递的电影筛选参数，如电影名称、地区、类别、上映时间范围等。
 */
public class SysMovieVo implements Serializable {

    /**
     * 序列化版本唯一标识符，确保类的版本一致性。
     */
    private static final long serialVersionUID = 1L;

    /**
     * 电影名称，用于模糊查询匹配电影。
     */
    private String movieName;

    /**
     * 电影所属地区，如“中国大陆”、“美国”等。
     */
    private String movieArea;

    /**
     * 电影类别 ID，用于按类别筛选电影。
     */
    private Long movieCategoryId;

    /**
     * 起始时间，用于筛选在此时间之后上映的电影。
     */
    private Date startDate;

    /**
     * 结束时间，用于筛选在此时间之前上映的电影。
     */
    private Date endDate;


    /**
     * 默认构造函数，用于创建一个空的 SysMovieVo 对象。
     */
    public SysMovieVo() {
    }

    /**
     * 带参数的构造函数，用于初始化所有查询条件字段。
     *
     * @param movieName       电影名称
     * @param movieArea       电影地区
     * @param movieCategoryId 电影类别 ID
     * @param startDate       开始时间
     * @param endDate         结束时间
     */
    public SysMovieVo(String movieName, String movieArea, Long movieCategoryId, Date startDate, Date endDate) {
        this.movieName = movieName;
        this.movieArea = movieArea;
        this.movieCategoryId = movieCategoryId;
        this.startDate = startDate;
        this.endDate = endDate;
    }

    // Getter 和 Setter 方法

    /**
     * 获取电影名称查询条件。
     *
     * @return 返回电影名称字符串
     */
    public String getMovieName() {
        return movieName;
    }

    /**
     * 设置电影名称查询条件。
     *
     * @param movieName 需要设置的电影名称
     */
    public void setMovieName(String movieName) {
        this.movieName = movieName;
    }

    /**
     * 获取电影地区查询条件。
     *
     * @return 返回电影地区字符串
     */
    public String getMovieArea() {
        return movieArea;
    }

    /**
     * 设置电影地区查询条件。
     *
     * @param movieArea 需要设置的电影地区
     */
    public void setMovieArea(String movieArea) {
        this.movieArea = movieArea;
    }

    /**
     * 获取电影类别 ID 查询条件。
     *
     * @return 返回电影类别 ID
     */
    public Long getMovieCategoryId() {
        return movieCategoryId;
    }

    /**
     * 设置电影类别 ID 查询条件。
     *
     * @param movieCategoryId 需要设置的电影类别 ID
     */
    public void setMovieCategoryId(Long movieCategoryId) {
        this.movieCategoryId = movieCategoryId;
    }

    /**
     * 获取开始时间查询条件。
     *
     * @return 返回开始时间 Date 对象
     */
    public Date getStartDate() {
        return startDate;
    }

    /**
     * 设置开始时间查询条件。
     *
     * @param startDate 需要设置的开始时间
     */
    public void setStartDate(Date startDate) {
        this.startDate = startDate;
    }

    /**
     * 获取结束时间查询条件。
     *
     * @return 返回结束时间 Date 对象
     */
    public Date getEndDate() {
        return endDate;
    }

    /**
     * 设置结束时间查询条件。
     *
     * @param endDate 需要设置的结束时间
     */
    public void setEndDate(Date endDate) {
        this.endDate = endDate;
    }

    /**
     * 判断当前对象是否与另一个对象相等。
     * 根据所有字段判断两个 SysMovieVo 对象是否相同。
     *
     * @param o 要比较的对象
     * @return 如果对象相等则返回 true，否则返回 false
     */
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        SysMovieVo that = (SysMovieVo) o;
        return Objects.equals(movieName, that.movieName) &&
               Objects.equals(movieArea, that.movieArea) &&
               Objects.equals(movieCategoryId, that.movieCategoryId) &&
               Objects.equals(startDate, that.startDate) &&
               Objects.equals(endDate, that.endDate);
    }

    /**
     * 生成基于所有字段的哈希码。
     *
     * @return 返回哈希码值
     */
    @Override
    public int hashCode() {
        return Objects.hash(movieName, movieArea, movieCategoryId, startDate, endDate);
    }

    /**
     * 返回当前对象的字符串表示，用于调试和日志输出。
     *
     * @return 包含所有字段信息的字符串
     */
    @Override
    public String toString() {
        return "SysMovieVo{" +
                "movieName='" + movieName + '\'' +
                ", movieArea='" + movieArea + '\'' +
                ", movieCategoryId=" + movieCategoryId +
                ", startDate=" + startDate +
                ", endDate=" + endDate +
                '}';
    }
}
package com.rabbiter.cm.domain.vo;

import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

/**
 * 封装电影查询的条件
 */
public class SysMovieVo implements Serializable {

    private String movieName;

    private String movieArea;

    private Long movieCategoryId;

    private Date startDate;

    private Date endDate;

    public SysMovieVo() {
    }

    public SysMovieVo(String movieName, String movieArea, Long movieCategoryId, Date startDate, Date endDate) {
        this.movieName = movieName;
        this.movieArea = movieArea;
        this.movieCategoryId = movieCategoryId;
        this.startDate = startDate;
        this.endDate = endDate;
    }

    public String getMovieName() {
        return movieName;
    }

    public void setMovieName(String movieName) {
        this.movieName = movieName;
    }

    public String getMovieArea() {
        return movieArea;
    }

    public void setMovieArea(String movieArea) {
        this.movieArea = movieArea;
    }

    public Long getMovieCategoryId() {
        return movieCategoryId;
    }

    public void setMovieCategoryId(Long movieCategoryId) {
        this.movieCategoryId = movieCategoryId;
    }

    public Date getStartDate() {
        return startDate;
    }

    public void setStartDate(Date startDate) {
        this.startDate = startDate;
    }

    public Date getEndDate() {
        return endDate;
    }

    public void setEndDate(Date endDate) {
        this.endDate = endDate;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        SysMovieVo that = (SysMovieVo) o;
        return Objects.equals(movieName, that.movieName) && Objects.equals(movieArea, that.movieArea) && Objects.equals(movieCategoryId, that.movieCategoryId) && Objects.equals(startDate, that.startDate) && Objects.equals(endDate, that.endDate);
    }

    @Override
    public int hashCode() {
        return Objects.hash(movieName, movieArea, movieCategoryId, startDate, endDate);
    }

    @Override
    public String toString() {
        return "SysMovieVo{" +
                "movieName='" + movieName + '\'' +
                ", movieArea='" + movieArea + '\'' +
                ", movieCategoryId=" + movieCategoryId +
                ", startDate=" + startDate +
                ", endDate=" + endDate +
                '}';
    }
}
